package com.eagle.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.HistoryListener;
import com.gwtext.client.core.Connection;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.Ext;
import com.gwtext.client.core.Margins;
import com.gwtext.client.core.Position;
import com.gwtext.client.core.RegionPosition;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.Component;
import com.gwtext.client.widgets.Container;
import com.gwtext.client.widgets.MessageBox;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.QuickTipsConfig;
import com.gwtext.client.widgets.TabPanel;
import com.gwtext.client.widgets.Toolbar;
import com.gwtext.client.widgets.ToolbarButton;
import com.gwtext.client.widgets.ToolbarTextItem;
import com.gwtext.client.widgets.Viewport;
import com.gwtext.client.widgets.Window;
import com.gwtext.client.widgets.WindowMgr;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.event.PanelListenerAdapter;
import com.gwtext.client.widgets.event.TabPanelListenerAdapter;
import com.gwtext.client.widgets.layout.BorderLayout;
import com.gwtext.client.widgets.layout.BorderLayoutData;
import com.gwtext.client.widgets.layout.FitLayout;
import com.gwtext.client.widgets.menu.Item;
import com.gwtext.client.widgets.menu.Menu;
import com.gwtext.client.widgets.tree.AsyncTreeNode;
import com.gwtext.client.widgets.tree.TreeFilter;
import com.gwtext.client.widgets.tree.TreePanel;
import com.gwtext.client.widgets.tree.XMLTreeLoader;

public class DemoControlPanel2 implements EntryPoint, HistoryListener
{
    private TabPanel centerPanel;
    private Menu menu;

    public void onModuleLoad()
    {
	Panel mainPanel = new Panel();
	mainPanel.setLayout(new BorderLayout());

	BorderLayoutData northLayoutData = new BorderLayoutData(RegionPosition.NORTH);
	northLayoutData.setSplit(false);

	BorderLayoutData centerLayoutData = new BorderLayoutData(RegionPosition.CENTER);
	centerLayoutData.setMargins(new Margins(5, 0, 5, 5));

	Panel centerPanelWrappper = new Panel();
	centerPanelWrappper.setLayout(new FitLayout());
	centerPanelWrappper.setBorder(false);
	centerPanelWrappper.setBodyBorder(false);

	centerPanel = new TabPanel();
	centerPanel.setBodyBorder(false);
	centerPanel.setEnableTabScroll(true);
	centerPanel.setAutoScroll(true);
	centerPanel.setAutoDestroy(false);
	centerPanel.setActiveTab(0);

	// hide the panel when the tab is closed
	centerPanel.addListener(new TabPanelListenerAdapter()
	{
	    public boolean doBeforeTabChange(TabPanel source, Panel newPanel, Panel oldPanel)
	    {
		WindowMgr.hideAll();
		return true;
	    }

	    public void onRemove(Container self, Component component)
	    {
		component.hide();
	    }

	    public void onContextMenu(TabPanel source, Panel tab, EventObject e)
	    {
		// showMenu(tab, e);
	    }
	});

	centerPanel.setLayoutOnTabChange(true);
	centerPanel.setTitle("Main Content");

	// screenManager = new ScreenManager(centerPanel);

	// setup the west regions layout properties
	BorderLayoutData westLayoutData = new BorderLayoutData(RegionPosition.WEST);
	westLayoutData.setMargins(new Margins(5, 5, 0, 5));
	westLayoutData.setCMargins(new Margins(5, 5, 5, 5));
	westLayoutData.setMinSize(155);
	westLayoutData.setMaxSize(350);
	westLayoutData.setSplit(true);

	BorderLayoutData eastLayoutData = new BorderLayoutData(RegionPosition.EAST);
	eastLayoutData.setMargins(new Margins(5, 5, 0, 5));
	eastLayoutData.setCMargins(new Margins(5, 5, 5, 5));
	eastLayoutData.setMinSize(155);
	eastLayoutData.setMaxSize(350);
	eastLayoutData.setSplit(true);

	// create the west panel and add it to the main panel applying the west
	// region layout properties
	Panel westPanel = createWestPanel();
	mainPanel.add(westPanel, westLayoutData);

	Panel eastPanel = createEastPanel();
	mainPanel.add(eastPanel, eastLayoutData);

	final Panel introPanel = new Panel();
	introPanel.setTitle("GWT-Ext 2.0.4 Showcase");
	introPanel.setPaddings(10);
	introPanel.setLayout(new FitLayout());
	// final ShowcaseView showcaseView = new ShowcaseView(screenManager);
	// introPanel.add(showcaseView);

	centerPanel.add(introPanel, centerLayoutData);
	centerPanelWrappper.add(centerPanel);
	mainPanel.add(centerPanelWrappper, centerLayoutData);

	final String initToken = History.getToken();
	if (initToken.length() != 0)
	{
	    mainPanel.addListener(new PanelListenerAdapter()
	    {
		public void onRender(Component component)
		{
		    onHistoryChanged(initToken);
		}
	    });
	}

	Viewport viewport = new Viewport(mainPanel);

	// Add history listener
	History.addHistoryListener(this);

    }

    private Panel createEastPanel()
    {
	Panel eastPanel = new Panel();
	eastPanel.setId("side-nav");
	eastPanel.setTitle("Showcase Explorer");
	eastPanel.setLayout(new FitLayout());
	eastPanel.setWidth(210);
	eastPanel.setCollapsible(true);

	// east panel content
	TreePanel eastXmlTreePanel = new TreePanel();
	XMLTreeLoader xmlTreeLoader = new XMLTreeLoader();
	xmlTreeLoader.setDataUrl("data/countries.xml");
	xmlTreeLoader.setMethod(Connection.GET);
	xmlTreeLoader.setRootTag("countries");
	xmlTreeLoader.setFolderIdMapping("@id");
	xmlTreeLoader.setLeafIdMapping("@id");
	xmlTreeLoader.setFolderTitleMapping("@title");
	xmlTreeLoader.setFolderTag("team");
	xmlTreeLoader.setLeafTitleMapping("@title");
	xmlTreeLoader.setLeafTag("country");
	xmlTreeLoader.setQtipMapping("@qtip");
	xmlTreeLoader.setCheckedMapping("@checked");
	xmlTreeLoader.setIconMapping("@icon");
	xmlTreeLoader.setAttributeMappings(new String[]
	{ "@rank" });
	

	AsyncTreeNode rootNode = new AsyncTreeNode("Countries", xmlTreeLoader);
	eastXmlTreePanel.setRootNode(rootNode);
	
	TreeFilter treeFilter = new TreeFilter(eastXmlTreePanel);
	treeFilter.filter("Australia");
	
	
//	eastXmlTreePanel.expandAll();

	BorderLayoutData eastXmlTreeData = new BorderLayoutData(RegionPosition.CENTER);
	eastXmlTreeData.setMargins(3, 0, 3, 3);
	eastPanel.add(eastXmlTreePanel, eastXmlTreeData);

	return eastPanel;
    }

    /**
     * This method is called whenever the application's history changes.
     * 
     * @param historyToken
     *                the histrory token
     */
    public void onHistoryChanged(String historyToken)
    {
	 MessageBox.alert(historyToken);
    }

    private Panel createWestPanel()
    {
	Panel westPanel = new Panel();
	westPanel.setId("side-nav");
	westPanel.setTitle("Showcase Explorer");
	westPanel.setLayout(new FitLayout());
	westPanel.setWidth(210);
	westPanel.setCollapsible(true);

	Toolbar toolbar = new Toolbar();

	if (Ext.isFirebug())
	{
	    ToolbarButton button = new ToolbarButton();
	    button.setIconCls("bug-icon");
	    QuickTipsConfig qtipsConfig = new QuickTipsConfig();
	    qtipsConfig.setText("Firebug can make the demo run slow.");
	    qtipsConfig.setWidth(100);
	    qtipsConfig.setMaxWidth(100);
	    button.setTooltip(qtipsConfig);
	    button.addListener(new ButtonListenerAdapter()
	    {
		public void onClick(Button button, EventObject e)
		{
		    Panel fb = new Panel();
		    fb.setAutoScroll(true);
		    fb.setAutoLoad("firebug.html");
		    final Window window = new Window("Firebug");
		    window.setIconCls("bug-icon");
		    window.setWidth(550);
		    window.setHeight(260);
		    window.add(fb);
		    window.setCloseAction(Window.CLOSE);
		    window.show(button.getElement());

		}
	    });
	    toolbar.addButton(button);
	}
	toolbar.addFill();
	toolbar.addItem(new ToolbarTextItem("Select Theme "));
	toolbar.addSpacer();
	// toolbar.addField(new ThemeChanger());
	westPanel.setTopToolbar(toolbar);

	TabPanel tabPanel = new TabPanel();
	tabPanel.setActiveTab(0);
	tabPanel.setDeferredRender(true);
	tabPanel.setTabPosition(Position.BOTTOM);
	// tabPanel.setTitle("tabPanel");
	// TreePanel treePanel = screenManager.getTreeNav();

	// tabPanel.add(treePanel);
	// tabPanel.add(screenManager.getAccordionNav());
	menu = new Menu();
	menu.addItem(new Item("first"));
	menu.addItem(new Item("second"));
	// tabPanel.add(menu);

	westPanel.add(tabPanel);

	return westPanel;
    }

}
